# -*- coding:utf-8 -*-
#实现注册和登录的逻辑
from flask import current_app,session
from . import api
from flask import request,jsonify
from ihome.utils.response_code import RET
from ihome import redis_store,db
from ihome.models import User


@api.route('/session',methods=['delete'])
def logout():
    '''
    清除session中的对应登录信息
    :return: 
    '''
    session.pop('user_id',None)
    session.pop('mobile',None)
    session.pop('name',None)

    return jsonify(errno=RET.OK,errmsg='OK')


@api.route('/session',methods=['post'])
def login():
    '''
    1.获取参数和判断是否有指
    2.从数据查询出制定的用户
    3.校验密码
    4.保护用户登录状态
    5.返回结果
    :return:
    '''
    #1.获取参数和判断是否有指
    data_dict = request.json
    mobile = data_dict.get('mobile')
    password = data_dict.get('password')
    if not all([mobile,password]):
        return jsonify(errno=RET.PARAMERR,errmsg = '参数不全')
    #2.从数据库查询指定的的用户
    try:
        user = User.query.filter_by(mobile=mobile).first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno= RET.DBERR,errmsg='查询数据错误')
    if not user:
        return jsonify(errno = RET.USERERR,errmsg = '用户不存在')
    #3.  校验密码
    if not user.check_password(password):
        return jsonify(errno = RET.PWDERR,errmsg='密码错误')
    #4.保存用户登录状态
    session['user_id'] = user.id
    session['name'] = user.name
    session['mobile'] = user.mobile
    #5.返回结果
    return jsonify(errno=RET.OK,errmsg='登录成功')


@api.route('/user',methods=['post'])
def register():
    '''
    1.获取参数和判断是否正确
    2.从redis中获取制定手机号对应的短信验证码
    3.校验验证码
    4.出事话user模型，并设置数据并添加到数据库
    5.保存当前用户的状态
    :return:
    '''
    #1.获取参数和判断是否有指
    data_dict = request.json
    mobile = data_dict.get('mobile')
    phonecode = data_dict.get('phonecode')
    password = data_dict.get('password')
    if not all([mobile,phonecode,password]):
        return jsonify(errno=RET.PARAMERR,errmsg = '参数不全')
    #2.从redis中获取制定手机号对应的短信验证码
    try:
        sms_code = redis_store.get('SMS_'+mobile)
    except Exception as e :
        current_app.logger.error(e)
        return jsonify(errno = RET.DBERR,errmsg='获取本地验证码失败')
    if not sms_code:
        return jsonify(errno = RET.NODATA,errmsg='验证码过期')
    #3. 校验验证码
    if phonecode != sms_code:
        return jsonify(errno = RET.DATAERR,errmsg = '短信验证码错误')
    #4.初始化user模型，并设置数据 添加到数据库
    user = User()
    user.name = mobile
    user.mobile = mobile
    #对密码进行处理
    user.password=password
    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        current_app.logger.error(e)
        return jsonify(error=RET.DATAERR,errmsg='数据保存错误')
    session['user_id'] = user.id
    session['name'] = user.name
    session['mobile'] = user.mobile
    return jsonify(errno = RET.OK,errmsg='注册成功')

















